package cn.tedu.spring.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Author：程Sir
 * Name： framework
 * Content:
 */
// 当前的类是关于登录判断的拦截器类
public class LoginInterceptor implements HandlerInterceptor {
    /*
        该方法是执行所有数据访问时，能够执行的拦截方法
        返回值boolean表示，当前的请求是被拦截还是放行，当前返回值是true时，表示可以放行。反之，不可以放行！
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器开始执行了！");
        // 先获取session对象
        HttpSession session = request.getSession();
        /*
            这个message应该是在用户登录时，存储到session中的数据，作为登录身份的依据
        */
        String message = (String) session.getAttribute("message");
        // 判断获取的值是否为null，如果为null则表面用户是没有登录的，就拦截，反之，已登录就放行
        if (message == null){
            //是null，没登录则跳转登录请求
            response.sendRedirect(request.getContextPath()+"/p/login.do"); // 路径非常重要，需要注意！
            System.out.println("开始重定向到登录请求！！！");
            return false;
        }
        // message不是null，表示已登录，则放行！
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}
